<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title>空对象{}的布尔运算</title>
	<link rel="stylesheet" href="">
</head>
<body>
<!-- 
	
 -->
<script>
if ([])
	console.log(1); //1
if ({})
	console.log(2); //2
if ([] == false)
	console.log(3); //3
if ({} == false) 
	console.log(4);
/**
（1）空数组[]和空对象{}都是object类型，因此直接用于if判断条件时就会被转化为true。

（2）任意值与布尔值比较，都会将两边的值转化为Number。

如果将空数组[]与布尔值false比较，false转化为0，而空数组[]也转化为0，因此[] == false的判断得到true。
如果将空对象{}与布尔值false比较，false转化为0，而空对象{}转化为NaN，由于NaN与任何数都不相等，因此{} == false的判断得到false。
 */

var a = {};
a!=false // true
a!=true //true
a!=NaN //true
a==NaN //false
a == false //false
a == true //false
a == a //true

console.log(([0]) ? true : false); // true
/**
 * [true description]
 * @type {[type]}
 * if([0]){
 *   true
 * }else{
 *    false
 * }
 */
console.log(([0] == false) ? true : false); // true
/**
 * [x description]
 * @type {[type]}
 * [0]直接用于if判断条件时会被转化为true。
与布尔值比较，都会将两边的值转化为Number，[0]转换为0，{x:0}转换为NaN。
 */
console.log(({x:0} == false) ? true : false); // false
console.log(Number({x:0})) //NaN
console.log(Number([0])) //0
/**
== 是非严格比较操作符，false会转换为0，[]会转换成''，{}会转换为"[object Object]"
 */
</script>
</body>
</html>